
package com.thinkgem.jeesite.common.component.redis.element;

import java.util.List;

import redis.clients.jedis.Jedis;

/** 
 * 放置rds的字符串处理类元素操作
 *
 */
public class RdsString {

	public RdsString(Jedis jedis) {
	    super();
	    this.jedis = jedis;
    }

	public Jedis getJedis() {
    	return jedis;
    }

	public void setJedis(Jedis jedis) {
    	this.jedis = jedis;
    }

	/**
	 * 给key设置value,value最大数据量不可超过1G
	 * @param key
	 * @param value
	 * 2014-10-27
	 */
	public void set(String key, String value) {
		getJedis().set(key, value);
	}

	/**
	 * 给key设置value,同时设置存活时间
	 * @param key
	 * @param value
	 * 2014-10-27
	 */
	public void set(String key, String value, int liveTime) {
		this.set(key, value);
		getJedis().expire(key, liveTime);
	}

	/**
	 * 同上,不使用expire,直接使用jedis接口的实现方式
	 * @param key
	 * @param seconds
	 * @param value
	 * @return
	 * 2014-10-27
	 */
	public String setex(String key,int seconds,String value) {
		return getJedis().setex(key, seconds, value);
	}

	/**
	 * 同set,只是根据操作结果返回状态码
	 * (当key值存在时,返回错误码,否则返回正确码)
	 * @param key
	 * @param value
	 * @return
	 * 2014-10-27
	 */
	public Long setnx(String key,String value) {
		return getJedis().setnx(key, value);
	}

	/**
	 * 设置key的值为value,并将key原来的值返回
	 * @param key
	 * @param value
	 * @return
	 * 2014-10-27
	 */
	public String getSet(String key,String value) {
		return getJedis().getSet(key, value);
	}

	/**
	 * 获取key对应的value值
	 * @param key
	 * @return
	 * 2014-10-27
	 */
	public String get(String key) {
		return getJedis().get(key);
	}

	/**
	 * 获取key在内存偏移位offset对应的bit值.
	 * (该接口使用场景不多,多用于流数据或组合对象)
	 * @param key
	 * @return
	 * 2014-10-27
	 */
	public Boolean getbit(String key,Long offset) {
		return getJedis().getbit(key, offset);
	}

	/**
	 * 获取key在内存范围start到end之间的value值
	 * (该接口使用场景不多,多用于流数据或组合对象)
	 * @param key
	 * @param ofStart
	 * @param ofEnd
	 * @return
	 * 2014-10-27
	 */
	public String getrange(String key,Long ofStart,Long ofEnd) {
		return getJedis().getrange(key, ofStart, ofEnd);
	}

	/**
	 * 一次原子操作下设置多个键值,如果其中有存在的key,则会进行覆盖
	 * (偷懒的设计,在参数中顺序排列:key1 val1...keyN valN,默认将奇数当作key,偶数当作val)
	 * @param keysvalues
	 * 2014-10-27
	 */
	public String mset(String... keysvalues) {
		return getJedis().mset(keysvalues);
	}

	/**
	 * 一次原子操作下设置多个键值,如果其中有存在的key,则会设置失败不再执行,而直接返回状态码.
	 * (偷懒的设计,在参数中顺序排列:key1 val1...keyN valN,默认将奇数当作key,偶数当作val)
	 * @param keysvalues
	 * @return
	 * 2014-10-27
	 */
	public Long msetnx(String... keysvalues){
		return getJedis().msetnx(keysvalues);
	}
	/**
	 * 通过多个key一次返回多个值
	 * 
	 * @param keys
	 */
	public List<?> mget(String... keys) {
		return getJedis().mget(keys);
	}


	private Jedis jedis;//当前客户端
}
